Spatiotemporal Controller for Controlling Robot Operation

ABSTRACT

A robot may include a spatiotemporal controller for controlling the kinematics or movements of the robot via continuous and/or granular adjustments to the actuators that perform the physical operations of the robot. The spatiotemporal controller may continuously and/or granularly adjust the actuators to align completion or execution of different objectives or waypoints from a spatiotemporal plan within time intervals allotted for each objective by the spatiotemporal plan. The spatiotemporal controller may also continuously and/or granularly adjust the actuators to workaround unexpected conflicts that may arise during the execution of an objective and delays that result from a workaround while still completing the objective within the allotted time interval. By completing objectives within the allotted time intervals, the spatiotemporal controller may ensure that conflicts do not arise as the robots simultaneously operate in the site using some of the same shared resource.

CLAIM OF BENEFIT TO RELATED APPLICATIONS

This application is a continuation of U.S. nonprovisional applicationSer. No. 16/044,344 entitled “Spatiotemporal Controller for ControllingRobot Operation”, filed Jul. 24, 2018, now U.S. Pat. No. 10,946,518. Thecontents of application Ser. No. 16/044,344 are hereby incorporated byreference.

BACKGROUND INFORMATION

Robots have been and continue to be introduced into the workplace toautomate various tasks therein. Robots are autonomous machines that maywork in tandem with humans or with other robots.

A robot may move, via some form of locomotion (e.g., wheels, tracks,legs, propellers, etc.), to deliver goods or perform other tasks in awarehouse or other site. Simultaneously, humans, other robots, and/orother objects may move in the same site. As congestion increases, so toodo the navigational and operational challenges. For instance, increasedcongestion may lead to an increase in the number of collisions,deadlocks, and other conflicts.

Robots may operate according to a set of programmed movements. Forinstance, a robot may accelerate at a specific rate for forwardmovement, may move forward at a first speed after acceleration, mayperform turns at a second speed, may raise and/or lower a platform at athird speed, and may perform other physical operations according to afixed programmed set of movements.

Operating with the set of programmed movements may lower the efficiencyof the robot. For instance, the robot may be unable to granularly adjustits movements to preemptively avoid a conflict. Without the ability todeviate from a set of programmed movements (e.g., perform gradualadjustments), a robot may be unable to operate in a continuous mannerand may continually interrupt its own movements by starting and stoppingto avoid conflicts or make other changes to its operation. Each suchinterruption can have a cascading effect that may cause the robot and/orother robots to miss completing timed objectives.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates an example of a robot navigating according to aspatiotemporal plan in accordance with some embodiments.

FIG. 2 illustrates an example of a robot navigating according to aspatiotemporal plan with waypoints that span one or more differentpoints in space, and that provide different time envelopes.

FIG. 3 conceptually illustrates example operation of a spatiotemporalcontroller.

FIG. 4 illustrates an example of a spatiotemporal controller executing acontinually changing objective based on a changing set of instanceobjectives and a changing buffer.

FIG. 5 illustrates an example of a spatiotemporal controller controllingmovements of a robot.

FIG. 6 presents a process for controlling the actuators of a robotaccording to the spatiotemporal robotic navigation set forth herein.

FIG. 7 illustrates example components of one or more devices, accordingto one or more embodiments described herein.

DETAILED DESCRIPTION OF PREFERRED EMBODIMENTS

Systems and methods, as presented herein, provide a spatiotemporalcontroller for controlling the kinematics or movements of an autonomousrobot via continuous and/or granular adjustments to the actuators thatperform the physical operations of the robot. The spatiotemporalcontroller may operate each of the actuators in any state between an offstate and a maximum operating state supported by that actuator, and isnot restricted to operating the actuators according to limited fixed orprogrammed states.

The spatiotemporal controller may continuously and/or granularly adjustthe actuators to align completion or execution of different objectivesor waypoints from a spatiotemporal plan within time intervals allottedfor each objective or waypoint by the spatiotemporal plan. Thespatiotemporal controller may also continuously and/or granularly adjustthe actuators to workaround unexpected conflicts that may arise duringthe execution of an objective, and delays that result from a workaroundwhile still completing the objective within the allotted time interval.

The spatiotemporal controller of a robot may include specializedhardware of the robot. For instance, the spatiotemporal controller maybe implemented as an application-specific integrated circuit or by oneor more processors of the robot. In some embodiments, the spatiotemporalcontroller may be specialized software that is stored to anon-transitory computer-readable medium of the robot. The specializedsoftware may include a set of processor-executable instructions that canbe executed by the one or more processors of the robot. Other componentsof the spatiotemporal controller may be described below with referenceto FIG. 7.

The spatiotemporal controller may control different actuators of a robotaccording to a spatiotemporal plan. More specifically, thespatiotemporal controller may manipulate the actuators to producephysical movements and other physical operations that execute thedifferent objectives of a spatiotemporal plan within the time intervalallotted for each objective by the spatiotemporal plan. The physicalmovements may include movements of the robot or mechanical elements ofthe robot. The spatiotemporal controller may control the physicaloperation of the actuators by controlling power, speed, angle,acceleration, torque, force, range, and/or other configurable operationsof an actuator in any of an essentially infinite range between an offstate and a maximum operating state supported by that actuator.

The actuators may include hydraulic, electrical, combustion, or othermotors or engines associated with locomotion, lifts, and/or componentsthat generate driving, pushing, or pulling forces. The actuators mayalso include mechanical arms, vacuums, suction elements, magnets,levers, pistons, movable platforms, and/or other mechanical elements ofthe robot. For instance, the spatiotemporal controller may control theseand other actuators by regulating the voltage and/or current provided tothe actuators at any point in time and/or by providing messaging thatcontinuously changes actuator operation. In doing so, the spatiotemporalcontroller can change the speed with which the robot moves, when and howa robot turns, and/or other physical movements of the robot.

In some embodiments, the spatiotemporal controller may access differentsensors of the robot to facilitate the control of the actuators. Forexample, the spatiotemporal controller may access one or more of acamera, accelerometer, LiDAR, radar, depth camera, magnetometer,gyroscope, wheel rotational sensor, light sensor (e.g., photoresistor orphotovoltaic cell), microphone, temperature sensor, contact sensor,proximity sensor, pressure sensor, tilt sensor, inertial measurementunit, voltage sensor, electric current sensor, clock, and/or othersensors that may be available on a robot. The spatiotemporal controller,based on the sensor output, may identify whether the robot is onschedule to a complete a task or objective by the time envelope allottedfor that task or objective, and may speed up, slow down, or otherwisechange the physical operation of one or more actuators accordingly. Thespatiotemporal controller may also determine whether execution of awaypoint is unsuccessful or successful based on the sensor output.

Each spatiotemporal plan may provide a robot non-conflicting access todifferent resources (e.g., points in space) and different time intervalswith which to access the different resources. A time interval associatedwith a given resource may specify a first time after which the robot mayaccess the resource, and/or a second time after which the robot is tocomplete its access of the resource. The second time may be one or moreseconds after the first time, or may be unconstrained. Eachspatiotemporal plan may also provide a precedence ordering by whichdifferent robots may access the same shared resource. The precedenceordering may be based on the time intervals, and may be used inconjunction with the time intervals to further eliminate conflict (e.g.,collision, delay, becoming deadlocked, etc.).

The spatiotemporal plan resources may correspond to points in spaceand/or time. The points in space and time associated with aspatiotemporal plan resource can be defined with any desiredgranularity. As one example, a point in space may be 2 feet in lengthand 2 feet in width, and a 2 second time interval may be provided for arobot to access that point in space. As another example, a point inspace may be 6 feet in length and 3 feet in width, and a 10 secondinterval may be provided for a robot to access that point in space. Themore granular planning provides tighter control over the movements andoperations of the robots, whereas a less granular planning provides therobots with more autonomy in executing the plan.

In addition to or instead of different points of physical space, eachspatiotemporal plan may also provide a robot access to other sharedresources at different time intervals. The shared resources may includeshared compute resources, shared sensors, another robot (e.g., aretrieval robot accessing a picking robot), human workers, etc.

FIG. 1 illustrates an example of robot 110 navigating according tospatiotemporal plan 120. Spatiotemporal plan 120 identifies differenttime intervals 130 by which robot 110 may access different points inspace 140. Each time interval 130 may specify an earliest access time bywhich robot 110 may access a corresponding point in space 140, and/or alast access time by which robot 110 is to complete access thecorresponding point in space 140.

Each point in space 140 that is associated with a point in time 130 mayrepresent a different waypoint 150, 160, 170, 180, and 190. Eachwaypoint 150-190 may therefore be a different objective for robot 110 tocomplete by a specific amount of time or within a time interval viaphysical robotic movements.

One or more of waypoints 150-190 may also be associated with aprecedence order 195. The precedence order 195 identifies a sharedresource that robot 110 and other robots are expected to access, andprovides an order by which each robot is permitted to access the sharedresource. For instance, precedence order 195 allows robot 110 to accesswaypoint 160, corresponding to a point in space (e.g., x2 and y2) withina specified time interval (e.g., t2-t4), after a first robot (e.g.,robot “r5”) and a second robot (e.g., robot “r2”) have finishedaccessing that same point in space.

Precedence order 195 may be added to spatiotemporal plan 120 to ensurethe coordinated operation of the robots, via adherence to theirspatiotemporal plans, even when actual operation of robot 110 or theother robots deviates from the spatiotemporal plan being executed by therobot. For instance, the spatiotemporal plans executed by the robots(e.g., robot 110, robot “r5”, and robot “r2” in FIG. 1) are defined sothat each robot may access a waypoint or resource without conflict.However, failures, outages, unexpected events, or actual movements oroperation of a robot may cause the robot to arrive earlier or later thanexpected. Precedence order 195 may ensure that the robots adhere totheir spatiotemporal plans and do not move out of order despite one ormore robots deviating from their spatiotemporal plans.

The spatiotemporal controller of robot 110 controls the actuators ofrobot 110 to autonomously perform or complete the objective associatedwith each waypoint 150-190 within the time interval specified inspatiotemporal plan 120. For instance, the spatiotemporal controller mayturn on and off different actuators, issue commands to the activatedactuators, and/or adjust power that is supplied to the activatedactuators to produce the physical robotic movements that execute thedifferent waypoint objectives.

In FIG. 1, waypoints 150-190 are closely defined, leaving thespatiotemporal controller with less autonomy on how to complete eachwaypoint objective. In some embodiments, the waypoint objectives can bemore loosely defined. For instance, the spatiotemporal plan may includeindividual waypoints that span one or more shared resources (e.g.,physical space) and wider time intervals with which to access the one ormore shared resources. In such instances, the spatiotemporal controllermay have greater autonomy with respect to completing the waypointobjectives or tasks.

FIG. 2 illustrates an example of robot 110 navigating according tospatiotemporal plan 210 with objectives 220, 230, and 240 that span oneor more different points in space, and that provide a time interval fortraversing the different points in space associated with each objective220, 230, or 240. Spatiotemporal plan 210 may reserve a different set ofspace or other shared resources for robot 110 for different timeintervals. For instance, spatiotemporal plan 210 may specify atask-to-time definition (e.g., move through (x2, y1) and (x2, y2) withintime interval t2-t4, turn right and move through (x3, y2) and (x4, y2)within time interval t6-t8, and turn left, move through (x4, y3), andretrieve an item within time interval t7-t9). As noted above, the timeintervals can also be unconstrained such that a different spatiotemporalplan may define movements of robot 110 based on a space-to-point in timedefinition (e.g., be at a first space no earlier than or by a firsttime, be at a second space no earlier than or by a second time, etc.).

The spatiotemporal controller of robot 110 may determine actuatorcontrols for successfully executing each of objectives 220, 230, and 240within the allotted time interval. For instance, objective 220 of plan210 may provide robot 110 a 6 second time interval to travel 10 feet tosuccessfully complete objective 220. The spatiotemporal controller maydetermine power settings for the motors of robot 110 to accelerate andtravel with sufficient velocity to cover the 10 feet sometime before the6 second time interval expires.

In some embodiments, the robot may make kinematic adjustments tocomplete a waypoint with some time buffer before the specified timeinterval for that waypoint expires. For instance, the robot may attemptto complete a waypoint with a 6 second time interval by 4 seconds inorder to preserve time in the event any adjustments have to be madebecause of an unexpected obstacle, failure, or other conflict duringexecution of the waypoint, or because a precedence order providing otherrobots first access to one or more resources associated with thewaypoint has yet to be met.

A waypoint or objective may include other tasks, in addition to or inlieu of physical movement in space, that a robot is to complete. Forinstance, a waypoint may include grabbing or picking of an item orobject, moving a mechanical arm some distance in three-dimensionalspace, raising or lowering a platform by some amount, changing directionof a camera, placement of an object, opening or closing a door, and/orother movements.

In some embodiments, the spatiotemporal controller may be used forspatiotemporal plan generation. In some such embodiments, thespatiotemporal controller may be accessed at the time of thespatiotemporal plan generation to determine if a plan is kinematicallyfeasible, before executing the plan and/or reserving the sharedresources at the different points called for by the plan.

The spatiotemporal controller may adhere to certain restrictions thatare associated with different shared resources of a site whencontrolling the physical operations of a robot (e.g., via control overthe robot actuators) during execution of plan objectives, or whendetermining the kinematic feasibility of the plan. For example, the sitemay have certain high traffic sections or areas where humans may cross.Speed limits may be specified for the robots in these high trafficsections. Accordingly, the spatiotemporal controller may account for thespeed limits and other site restrictions when controlling the physicaloperations of the robot, and/or determining the kinematic feasibility ofa plan.

The spatiotemporal controller may make continuous adjustments toactuator usage based on a continually changing objective. Thespatiotemporal controller may update the continually changing objectiveat each operational cycle of the spatiotemporal controller. Eachoperational cycle may span tens or hundreds of milliseconds (ms). Duringeach operational cycle, the spatiotemporal controller may updateoperations or movements that one or more actuators of the robot performbefore the next operational cycle. The spatiotemporal controller maycause the robot's actuators to perform the same or different operationsor movements over each operational cycle to bring the robot closertowards completion of a waypoint from a spatiotemporal plan.

In some embodiments, the continually changing objective may berepresented as a set of instance objectives. Each set of instanceobjectives partitions an overall waypoint or objective into severalminute actuator movements or operations. Each instance objectiverepresents an actuator movement or operation that can be performedduring the brief time spanned by the spatiotemporal controlleroperational cycle. For instance, a waypoint from a spatiotemporal planmay specify an overall task or objective for a robot to execute in 5seconds. The spatiotemporal controller of the robot may partition thewaypoint into 50 instance objectives when each operational cycle of thespatiotemporal controller is 100 ms. Each of the 50 instance objectivesis successfully completed by performing some actuator movement oroperation that completes at least 1/50 of the overall task or objective.

The spatiotemporal controller may monitor sensors or the actuators ateach operational cycle to determine whether each instance objective issuccessfully completed. In response to a successfully completed instanceobjective, the spatiotemporal controller executes the next instanceobjective via commands or other control of the actuators. In response toan unsuccessfully completed instance objective, the spatiotemporalcontroller may modify the next and subsequent instance objectives tocompensate for the failed execution of the prior instance objective bychanging the actuator movements or operations that are to be performedduring subsequent operational cycles. For example, should the robot failto cover a planned distance during a previous instance objective, thespatiotemporal controller can compensate and recover by accelerating orotherwise increasing speed of the robot's motors to traverse moredistance in the current and/or next instance objective(s). In thismanner, the spatiotemporal controller may execute a continually changingobjective by updating operations and movements of the robot's actuatorsat each instance objective or operational cycle.

The operational cycles of the spatiotemporal controller may varydepending on processing power of the robot, desired granularity overrobotic movements, and/or power consumption. FIG. 3 conceptuallyillustrates an example of spatiotemporal controller 310 of a robotcompleting waypoint 320 from a spatiotemporal plan by continuouslyexecuting different instance objectives 330 that partition the overalltask or objective of waypoint 320 into minute actuator movements oroperations that are updated at each operational cycle of spatiotemporalcontroller 310.

In FIG. 3, waypoint 320 may include multiple points in space that therobot is to traverse by a specific point in time or specific amount oftime. For example, waypoint 320 may be a straight distance of 10 feetthat the robot is to traverse in 5 seconds.

Spatiotemporal controller 310 may execute an operational cycle every 100ms. Accordingly, in this example, spatiotemporal controller 310 maypartition the objective of waypoint 320 into 50 instance objectives 330.

A simplistic partitioning may include spatiotemporal controller 310powering the motors of the robot to cover 0.2 feet every 100 ms (e.g.,every instance objective or operational cycle). This simplisticpartitioning does not however take into account real-world constraintsand performance parameters of the robot's actuators. For instance, therobot cannot instantaneously accelerate to a given speed in the time ofa single instance objective.

Accordingly, in some embodiments, spatiotemporal controller 310 analyzesthe waypoint 320 to produce a non-uniform partitioning of actuatormovements or operations over the set of instance objectives 330. Thenon-uniform partitioning may be produced based on spatiotemporalcontroller 310 determining the one or more actuators of the robotimplicated by the one or more tasks or objectives of waypoint 320,tracking and accounting for the real-world constraints and performanceparameters of the implicated actuators, and defining instance objectives330 that are kinematically feasible based on the real-world constraintsand performance parameters of the implicated actuators. An instanceobjective that is kinematically feasible is a movement or operation thata particular actuator can complete in the time of the instanceobjective.

The non-uniform partitioning, as shown in FIG. 3, may includespatiotemporal controller 310 powering the robot's motors to accelerateduring a first subset of instance objectives 340. For example, eachinstance objective of the first subset of instance objectives 340 mayinclude spatiotemporal controller 310 gradually increasing power that isprovided to the robot's drive motors from 0 amperes (A) to 5 A. In thisexample, spatiotemporal controller 310 may increase power to the robot'sdrive motor by an additional 0.3 A during execution of each instanceobjective. As another example, spatiotemporal controller 310 may issue acommand to increase power to the drive motor from 0 A to 2.5 A, waituntil the drive motor reaches a first speed, before increasing powerfrom 2.5 A to 5 A. Spatiotemporal controller 310 may control the drivemotor by adjusting other operational parameters (e.g., voltage andcurrent) of the drive motor, or by issuing commands (e.g., reach aparticular revolutions per minute, reach a particular velocity, etc.)that the drive motor responds to with adjusted operational parameters.

During the first subset of instance objectives 340, the robot may beunable to cover 0.2 feet at each instance objective, and may insteadcover, on average, 0.1 feet at each instance objective. Spatiotemporalcontroller 310 may compensate for the short distance traversed duringexecution of the first subset of instance objectives 340 by bringing therobot to a speed at which it may cover 0.5 feet with each instanceobjective of a subsequent second subset of instance objectives 350. Forinstance, spatiotemporal controller 310 may increase power to the drivemotors of the robot while continuously monitoring a velocity receiver,accelerometer, speedometer, or other speed sensor to determine whetherthe robot is moving a desired amount of distance during execution ofeach instance objective. Updates by spatiotemporal controller 310 to thedrive motor occur in an essentially continuous manner because of theshort period of time associated with operational cycle of kinematiccontroller 310 and corresponding instance objective (e.g., tens orhundreds of ms). In FIG. 3, spatiotemporal controller 310 controls therobot to traverse more ground during execution of the second subset ofinstance objective 350 than during execution of the first subset ofinstance objectives 340.

Spatiotemporal controller 310 may then slow the robot's movements duringexecution of a third subset of instance objectives 360 in order to bringthe robot to a stop at the end of the 10 feet objective of waypoint 320,whereby execution of the first, second, and third subsets of instanceobjectives 340, 350, and 360 span the 5 seconds provided as the timeenvelope for execution of waypoint 320.

In some embodiments, the spatiotemporal controller may create a bufferby preserving some instance objectives from the set of instanceobjectives for executing a waypoint objective. The instance objectivesassociated with the buffer can be used to compensate for unsuccessfulexecution of one or more other instance objectives without impactingsuccessful completion of the overall task or objective associated withthe waypoint. The spatiotemporal controller may update the continuallychanging objective to reduce the number of instance objectives that areavailable as a buffer as the robot is closer to successful completion ofa waypoint objective.

FIG. 4 illustrates an example of spatiotemporal controller 310 executinga continually changing objective based on a changing set of instanceobjectives 410 and a changing buffer. In FIG. 4, spatiotemporalcontroller 310 may execute the same overall task or objective ofwaypoint 320 from FIG. 3 with the changing buffer. For instance, theoverall task or objective may include moving the robot a straightdistance of 10 feet in 5 seconds, with spatiotemporal controller 310operating at 100 ms operational cycles. Here again, spatiotemporalcontroller 310 has 50 instance objectives 410 with which to execute theoverall task or objective of waypoint 320.

The changing buffer may include some changing percentage or number ofinstance objectives from the set of instance objectives 410 that arereserved for working around unexpected obstacles, failures, orconflicts. The number of reserved instance objectives for the buffer maybe greater the farther the robot is from completing the overallobjective or task of waypoint 320, and smaller the closer the robot isto completing the overall objective or task of waypoint 320.

As shown, spatiotemporal controller 310 may maintain a buffer 420 of 1second from the total 5 second allotment at the beginning of theparticular waypoint execution, and during execution of a first subset ofinstance objectives 430. In other words, spatiotemporal controller 310may reserve 20% or 10 of the 50 instance objectives for a first buffer420 during initial execution of waypoint 320. Spatiotemporal controller310 may then determine a kinematically feasible usage of the robot'sactuators to execute the tasks or objectives of waypoint 320 with theremaining 40 instance objectives not reserved for buffer 420. Each ofthe 40 instance objectives may include actuator movements or operationsthat bring the robot closer to successfully completing tasks orobjectives of waypoint 320 by the buffer reduced 4 second time envelope.

Spatiotemporal controller 310 may begin to execute the instanceobjectives in a sequential manner. As an instance objective issuccessfully completed during an operational cycle of spatiotemporalcontroller 310, spatiotemporal controller 310 may execute a nextinstance objective during a next operational cycle.

Spatiotemporal controller may change from first buffer 420 to secondbuffer 440 by reducing the buffer size to 10% or 5 instance objectivesonce spatiotemporal controller 310 has successfully executed each of thefirst subset of the instance objectives 430 by a first amount of time.

Based on the reduced buffer size (e.g., 10 instance objectives to 5instance objectives) of second buffer 440, spatiotemporal controller 310may update the actuator movements or operations to execute the remainingtasks or objectives of waypoint 320 with the remaining instanceobjectives (e.g., 40−11+5). In this figure, spatiotemporal controller310 attempts to traverse 5 feet during the next 2.4 seconds (e.g.,second amount of time) or second subset of instance objective 450 (e.g.,next 24 instance objectives).

Spatiotemporal controller 310 may again change from second buffer 440 tothird buffer 460 by reducing the buffer size to 5% or 3 instanceobjectives once spatiotemporal controller 310 has successfully executedeach instance objective of the second subset of instance objectives 450by moving the robot 5 feet in the second amount of time (e.g., 2.4seconds). In the event that the robot does not successfully traverse thedesired 5 feet distance during the second amount of time, spatiotemporalcontroller 310 can use one or more of the 5 instance objectives reservedfor second buffer 440 to compensate and make up the distance in order tosuccessfully execute the objective of waypoint 320. For instance,spatiotemporal controller 310 is shown to use an additional two instanceobjectives 470 or 200 ms to completely traverse the desired 5 feetdistance with the two instance objectives 470 coming from second buffer440.

Spatiotemporal controller 310 may eliminate third buffer 460 or retain5% or 3 instance objectives until the tasks or objectives of waypoint320 are complete during a third amount of time (e.g., the final 1.3seconds). For instance, spatiotemporal controller 310 may slow operationof the robot through execution of all remaining instance objectives 480including instance objectives of third buffer 460 so that waypoint 320is successfully completed by the allotted 5 second time interval forwaypoint 320.

The single task of driving the robot in a straight direction may includedifferent control of the same or different robot actuators over time(e.g., accelerating, maintaining speed, decelerating, etc.). The controlof the actuators is further complicated when the waypoint involvesdifferent tasks and operations, and/or when the one or more tasks orobjectives of the waypoint implicate different actuators of the robot.

FIG. 5 illustrates an example of spatiotemporal controller 310 of robot110 controlling movements of robot 110 during execution ofspatiotemporal plan waypoint 510 that includes different tasks. Waypoint510 may specify a destination that robot 110 is to arrive at by aparticular time envelope. The path to the destination may include robot110 performing right and left turns. Spatiotemporal controller 310 maycontrol movements of the robot 110 by controlling a left wheel motor anda right wheel motor of robot 110.

Robot 110 is initially shown entering the points of space associatedwith the waypoint at a first speed 520 based on spatiotemporalcontroller 310 supplying (at 525) a first and equal amount of power(e.g., 8 A) to the first and second motors. The first and equal amountof power supplied to the first and second motors causes robot 110 tomove in a straight path at the first speed 520. Supplying the firstamount of power may include spatiotemporal controller 310 continuouslyadjusting power that is supplied to the first and second motors duringeach instance objective that is executed during the time robot 110 movesat the first speed 520.

Spatiotemporal controller 310 may access different sensors of robot 110to monitor the first speed 520, and detect that robot 110 is approachinga particular point in space that is associated with initiating the rightturn. Based on the sensor information, spatiotemporal controller 310 maygradually reduce (at 530) the power to the first and second motors toslow movement of the robot from the first speed 520 to a slower secondspeed 540. The power reduction (at 530) occurs based on spatiotemporalcontroller 310 continuously updating and lowering the power to the firstand second motors during execution of a subset of instance objectives.

Spatiotemporal controller 310 may be programmed to perform turns at athird speed 545 that is even slower than the second speed 540. The thirdspeed 545 may be based on a maximum centripetal acceleration of robot110, or is otherwise determined to be a safe speed to perform the turnbased on dimensions and weight distribution of robot 110, turningradius, and/or safety for objects that may be carried by robot 110.

In response to detecting arrival of robot 110 at the particular point inspace 550 where the right turn is to be initiated, spatiotemporalcontroller 310 may reduce (at 560) power to the left motor to operatethe left motor at the third speed 545, and may further reduce (at 560)or shut off power to the right motor to cause robot 110 to perform theright turn at the third speed 545.

Waypoint 510 may call for robot 110 to traverse a short distance beforehaving to initiate the left turn. Accordingly, spatiotemporal controller310 may increase (at 570) power to both the right and left motors tocause robot 110 to move straight at the second speed 540, beforeupdating and changing (at 580) the power that is provided to the leftand right motors to perform the left turn at the third speed 545.Spatiotemporal controller 310 can then continuously adjust (at 590)power to move robot 110 in a straight line to the desired destination inthe remaining time of the time envelope provided by waypoint 510.

FIG. 6 presents a process 600 for controlling the actuators of a robotaccording to the spatiotemporal robotic navigation set forth herein.Process 600 may be performed by the spatiotemporal controller of therobot, and may include the spatiotemporal controller controlling theactuators of the robot in execution of each waypoint from aspatiotemporal plan.

Process 600 may include the spatiotemporal controller obtaining (at 610)a particular waypoint from the spatiotemporal plan. In some embodiments,the spatiotemporal controller receives the spatiotemporal plan once theplan is generated. The kinematic controller may receive thespatiotemporal plan from the central planner or a plan generatingprocessor of the robot. The spatiotemporal controller may store the planin local memory of the robot. The spatiotemporal controller maysequentially obtain (at 610) and execute each of the waypoints from thespatiotemporal plan. Alternatively, the central planner or the plangenerating processor of the robot may directly provide the particularwaypoint to the spatiotemporal controller once the spatiotemporal planis generated.

Process 600 may further include extracting (at 615), from the particularwaypoint, one or more tasks that the robot is to complete by aparticular amount of time. The one or more tasks may include moving therobot through different points of space, moving or manipulating objectswith different mechanical elements of the robots, and/or performingother physical movements or operations with the different actuators ofthe robot.

Process 600 may include selecting (at 620) one or more actuators of therobot that can be used to execute the tasks extracted (at 615) from theparticular waypoint. For example, tasks involving moving a robot inspace may implicate drive motors of the robot, whereas tasks involvingpicking an item may implicate actuators associated with a mechanicalarm, vacuum, and/or lift of the robot. The spatiotemporal controller maystore a task to actuator mapping. The mapping may differ from robot torobot depending on the actuators that each robot is configured with.

Process 600 may include determining (at 625) movements or operations ofthe one or more actuators to execute each task, and time to completeeach movement or operation based on constraints and performanceparameters of each actuator. For example, powering a drive motor at 5 Afor one second may move the robot 2 feet, whereas powering the motor at3 A for one second may move the robot 1 foot. In some embodiments, thespatiotemporal controller may access the various sensors of the robot todetermine the movements that are needed to complete each task. Forinstance, a first task may include moving a robot to a particular pointin space, and a second task may include moving a mechanical arm of therobot while the robot is at the particular point in space. To completethese tasks, the spatiotemporal controller may access a camera orpositional sensor of the robot to determine the robot's current positionfor the first task, and may access an actuator associated with themechanical arm to determine a position of the mechanical arm for thesecond task.

Process 600 may optionally determine whether execution of the particularwaypoint is kinematically feasible with the implicated actuators and theconstraints and performance parameters of the implicated actuators.Determining the kinematic feasibility of the particular waypoint may beavoided, because the spatiotemporal plan and the different waypointstherein may be determined to be kinematically feasible at the time thespatiotemporal plan is generated.

Process 600 may include partitioning (at 630) the movements andoperations into a set of instance objectives. The portioning (at 630)may be based on the time to complete each movement or operation. Forinstance, a first actuator operation that takes 450 ms to complete maybe partitioned into 5 instance objectives that each span 100 ms. Each ofthe 5 instance objectives may then perform some part of the firstactuator operation. Partitioning (at 630) the movements and operationsinto the set of instance objectives may include assigning movements andoperations of two different actuators to the same instance objective.For instance, the spatiotemporal controller may simultaneously control afirst drive motor and a second drive motor over one or more instanceobjectives, or may simultaneously control movement and operation of afirst actuator for raising and lowering a mechanical arm, and a secondactuator for opening and closing a grabbing element at the end of themechanical arm over one or more instance objectives. The set of instanceobjectives execute the overall task or objective of the particularwaypoint within the particular amount of time provided for successfulexecution of the particular waypoint. The partitioning (at 630) mayinclude providing a buffer, by reserving some percentage or number ofinstance objectives, to work around unsuccessful execution of any of theinstance objectives.

Process 600 may select (at 640) a next instance objective from thepartitioned set of instance objectives to perform during a currentoperational cycle of the spatiotemporal controller. Process 600 maycontrol (at 650) the one or more actuators associated with the selectedinstance objective to execute movements or operations associated withthe selected instance objective. For instance, the spatiotemporalcontroller may execute the movements or operations by issuing commandsand/or controlling the amount of power that is provided to the one ormore actuators.

At the end of the current operational cycle, process 600 may access (at660) the one or more actuator or sensors associated with the actuators.Process 600 may determine (at 670), based on the actuator or sensoraccess, whether the selected instance objective was successfullycompleted during the current operational cycle.

In response to determining (at 670—Yes) that the selected instanceobjective was successfully completed, process 600 may determine (at 680)if additional instance objectives remain. In response to determining (at680—Yes) that additional instance objectives remain, process 600 mayselect (at 640) a next instance objective, and may control (at 650)actuators of the robot to execute movements or operations that areassociated with the selected instance objective. In response todetermining (at 680—No) that there are no remaining instance objectives,process 600 may obtain (at 610) a next waypoint from the spatiotemporalplan, process 600 may be restarted, or process 600 may end if thespatiotemporal plan is complete and there are no remaining waypoints toexecute.

In response to determining (at 670—No) that the selected instanceobjective was not successfully completed, process 600 may furtherdetermine (at 675) if additional instance objectives remain forresolving the failed executed of the current selected instanceobjective. The additional instance objectives may include instanceobjectives set aside as part of a buffer or as additional actuatormovements or operations that are to be performed within the amount oftime that remains from the time envelope of the particular waypoint.

In response to determining (at 675—Yes) additional instance objectivesremain to resolve the failed instance objective execution, process 600may replan (at 685) the actuator movements or operations to perform overthe remaining instance objectives. If the spatiotemporal controllercreated an instance objective buffer, the replanning (at 685) mayinclude executing the incomplete movements or operations from thecurrent instance objective using instance objectives from the buffer.Other movements or operations planned for instance objectives followingthe current instance objective may be delayed until execution of theincomplete movements or operations via execution of the instanceobjectives from the buffer is complete. If the spatiotemporal controllerhas no buffer or has already used the instance objectives of the buffer,the replanning (at 685) may include re-adjusting the actuator movementsor operations to be executed in the remaining instance objectives toinclude execution of the incomplete movements or operations from thecurrent instance objective. For instance, the spatiotemporal controllermay accelerate some of the remaining movements or operations so thatthey can be executed in one or more fewer instance objectives, and usingthe freed instance objectives for execution of the incomplete movementsor operations from the current instance objective. After replanning (at685), process 600 may include selecting (at 640) a next instanceobjective from the replanned set of instance objectives, and controlling(at 650) actuator movements and operations according to the replannedinstance objective.

In response to determining (at 675—No) that there are no remaininginstance objectives to resolve the failed instance objective execution,process 600 may generate (at 690) and/or distribute a failure message tothe other robots or the central planner. The failure message mayindicate that the particular waypoint could not be successfullyexecuted. In response, a new spatiotemporal plan may be created for therobot. Other robots can also attempt to work around the failure if thefailure creates a conflict in shared resources the other robots are toaccess.

Server, device, and machine are meant in their broadest sense, and caninclude any electronic device with a processor including cellulartelephones, smartphones, portable digital assistants, tablet devices,laptops, notebooks, and desktop computers. Examples of computer-readablemedia include, but are not limited to, CD-ROMs, flash drives, RAM chips,hard drives, EPROMs, etc.

FIG. 7 is a diagram of example components of device 700. Device 700 maybe used to implement certain of the devices described above (e.g., thecentral planner, the robots, the spatiotemporal controller, etc.).Device 700 may include bus 710, processor 720, memory 730, inputcomponent 740, output component 750, and communication interface 760. Inanother implementation, device 700 may include additional, fewer,different, or differently arranged components.

Bus 710 may include one or more communication paths that permitcommunication among the components of device 700. Processor 720 mayinclude a processor, microprocessor, or processing logic that mayinterpret and execute instructions. Memory 730 may include any type ofdynamic storage device that may store information and instructions forexecution by processor 720, and/or any type of non-volatile storagedevice that may store information for use by processor 720.

Input component 740 may include a mechanism that permits an operator toinput information to device 700, such as a keyboard, a keypad, a button,a switch, etc. Output component 750 may include a mechanism that outputsinformation to the operator, such as a display, a speaker, one or morelight emitting diodes (“LEDs”), etc.

Communication interface 760 may include any transceiver-like mechanismthat enables device 700 to communicate with other devices and/orsystems. For example, communication interface 760 may include anEthernet interface, an optical interface, a coaxial interface, or thelike. Communication interface 760 may include a wireless communicationdevice, such as an infrared (“IR”) receiver, a Bluetooth® radio, WiFiradio, LTE radio, or the like. The wireless communication device may becoupled to an external device, such as a remote control, a wirelesskeyboard, a mobile telephone, etc. In some embodiments, device 700 mayinclude more than one communication interface 760. For instance, device700 may include an optical interface and an Ethernet interface.

Device 700 may perform certain operations relating to one or moreprocesses described above. Device 700 may perform these operations inresponse to processor 720 executing software instructions stored in acomputer-readable medium, such as memory 730. A computer-readable mediummay be defined as a non-transitory memory device. A memory device mayinclude space within a single physical memory device or spread acrossmultiple physical memory devices. The software instructions may be readinto memory 730 from another computer-readable medium or from anotherdevice. The software instructions stored in memory 730 may causeprocessor 720 to perform processes described herein. Alternatively,hardwired circuitry may be used in place of or in combination withsoftware instructions to implement processes described herein. Thus,implementations described herein are not limited to any specificcombination of hardware circuitry and software.

The foregoing description of implementations provides illustration anddescription, but is not intended to be exhaustive or to limit thepossible implementations to the precise form disclosed. Modificationsand variations are possible in light of the above disclosure or may beacquired from practice of the implementations.

The actual software code or specialized control hardware used toimplement an embodiment is not limiting of the embodiment. Thus, theoperation and behavior of the embodiment has been described withoutreference to the specific software code, it being understood thatsoftware and control hardware may be designed based on the descriptionherein.

Some implementations described herein may be described in conjunctionwith thresholds. The term “greater than” (or similar terms), as usedherein to describe a relationship of a value to a threshold, may be usedinterchangeably with the term “greater than or equal to” (or similarterms). Similarly, the term “less than” (or similar terms), as usedherein to describe a relationship of a value to a threshold, may be usedinterchangeably with the term “less than or equal to” (or similarterms). As used herein, “exceeding” a threshold (or similar terms) maybe used interchangeably with “being greater than a threshold,” “beinggreater than or equal to a threshold,” “being less than a threshold,”“being less than or equal to a threshold,” or other similar terms,depending on the context in which the threshold is used.

No element, act, or instruction used in the present application shouldbe construed as critical or essential unless explicitly described assuch. An instance of the use of the term “and,” as used herein, does notnecessarily preclude the interpretation that the phrase “and/or” wasintended in that instance. Similarly, an instance of the use of the term“or,” as used herein, does not necessarily preclude the interpretationthat the phrase “and/or” was intended in that instance.

Also, as used herein, the article “a” is intended to include one or moreitems, and may be used interchangeably with the phrase “one or more.”Where only one item is intended, the terms “one,” “single,” “only,” orsimilar language is used. Further, the phrase “based on” is intended tomean “based, at least in part, on” unless explicitly stated otherwise

In the preceding specification, various preferred embodiments have beendescribed with reference to the accompanying drawings. It will, however,be evident that various modifications and changes may be made thereto,and additional embodiments may be implemented, without departing fromthe broader scope of the invention as set forth in the claims thatfollow. The specification and drawings are accordingly to be regarded inan illustrative rather than restrictive sense.

We claim:
 1. A method comprising: receiving, at a controller of a robot,a task and a time by which to complete the task; determining, byoperation of the controller, a plurality of adjustments to apply to oneor more actuators of the robot in order to produce a plurality ofexpected movements or operations of the robot with which to complete thetask within the time, wherein each adjustment of the plurality ofadjustments changes a movement or operation performed by the one or moreactuators during a different operational cycle of the controller;controlling, by operation of the controller, the one or more actuatorsduring a first operational cycle of the controller according to a firstadjustment from the plurality of adjustments; determining, by operationof the controller, actual movement or operation produced by the one ormore actuators during the first operational cycle; controlling, byoperation of the controller, the one or more actuators during a secondoperational cycle that is after the first operational cycle according toa second adjustment that is after the first adjustment in the pluralityof adjustments in response to the actual movement or operation matchingan expected movement or operation associated with the first adjustment;and controlling, by operation of the controller, the one or moreactuators during the second operational cycle according to a modifiedsecond adjustment in response to the actual movement or operationdeviating from the expected movement or operation associated with thefirst adjustment, wherein implementing the modified second adjustmentcomprises modifying a parameter that controls the one or more actuatorsadjusted by the second adjustment from a first value to a differentsecond value, and wherein the second value is derived from a differencebetween the actual movement or operation and the expected movement oroperation.
 2. The method of claim 1 further comprising: determining theactual movement or operation is less than the expected movement oroperation; and wherein controlling the one or more actuators accordingto the modified second adjustment comprises increasing speed of therobot by increasing an amount of power that is supplied to the one ormore actuators from the first value to the second value, wherein thesecond value is greater than the first value.
 3. The method of claim 1further comprising: selecting the one or more actuators from a pluralityof actuators of the robot based the task involving movements andoperations that are performed by the one or more actuators.
 4. Themethod of claim 1 further comprising: computing the expected movement oroperation for each adjustment of the plurality of adjustments based onperformance parameters that are tracked for the one or more actuators.5. The method of claim 1, wherein determining the actual movement oroperation produced by the one or more actuators during the firstoperational cycle comprises: tracking movements or operations of therobot during the first operational cycle with one or more sensors of therobot.
 6. The method of claim 1, wherein controlling the one or moreactuators during the first operational cycle comprises: issuing a firstset of commands from the controller to the one or more actuators,wherein the first set of commands configure operations of the one ormore actuators.
 7. The method of claim 1 further comprising: determiningat least one incomplete movement in the expected movement or operationthat is not performed in the actual movement or operation produced bythe one or more actuators during the first operational cycle; anddefining the modified second adjustment to perform the at least oneincomplete movement before performing movements or operations associatedwith the second adjustment during the second operational cycle.
 8. Themethod of claim 1 further comprising: determining at least oneincomplete movement in the expected movement or operation that is notperformed in the actual movement or operation produced by the one ormore actuators during the first operational cycle; determining that thesecond adjustment is reserved as a buffer and is not defined to performany movement or operation; and shifting execution of the at least oneincomplete movement into the buffer by defining movements or operationsto perform the at least one incomplete movement with the one or moreactuators during the second operational cycle as the modified secondadjustment.
 9. The method of claim 1 further comprising: determining atleast one incomplete movement in the expected movement or operation thatis not performed in the actual movement or operation produced by the oneor more actuators during the first operational cycle; determining thatone or more of the plurality of adjustments are reserved as a buffer;shifting movements or operations defined for the second adjustment intoa third adjustment that is after the second adjustment in the pluralityof adjustments; and defining movements or operations to perform the atleast one incomplete movement as the modified second adjustment.
 10. Themethod of claim 1, wherein controlling the one or more actuators duringthe first operational cycle according to the first adjustment comprisesperforming a particular movement with the robot at a first speed orrate; and wherein controlling the one or more actuators during thesecond operational cycle according to the modified second adjustmentcomprises performing the same particular movement with the robot at adifferent second speed or rate.
 11. The method of claim 1, whereincontrolling the one or more actuators during the first operational cycleaccording to the first adjustment comprises performing a first movementof the robot; and wherein controlling the one or more actuators duringthe second operational cycle according to the modified second adjustmentcomprises performing a different second movement of the robot.
 12. Themethod of claim 1, wherein controlling the one or more actuators duringthe first operational cycle according to the first adjustment comprisessupplying a first amount of power to the one or more actuators; andwherein controlling the one or more actuators during the secondoperational cycle according to the modified second adjustment comprisessupplying a different second amount of power to the one or moreactuators.
 13. The method of claim 1, wherein the task involves movingthe robot from a current position to a particular waypoint, wherein theone or more actuators comprise one or more drive motors of the robot,and wherein the plurality of adjustments comprise adjusting parameterscontrolling speed or direction of the one or more drive motors.
 14. Themethod of claim 1, wherein the one or more actuators comprise one ormore of a drive motor, lift, vacuum, mechanical arm, grabber, retriever,or powered mechanical element of the robot.
 15. A controller for arobot, the controller comprising: one or more processors configured to:receive a task and a time by which to complete the task; determine aplurality of adjustments to apply to one or more actuators of the robotin order to produce a plurality of expected movements or operations ofthe robot with which to complete the task within the time, wherein eachadjustment of the plurality of adjustments changes a movement oroperation performed by the one or more actuators during a differentoperational cycle of the controller; control the one or more actuatorsduring a first operational cycle of the controller according to a firstadjustment from the plurality of adjustments; determine actual movementor operation produced by the one or more actuators during the firstoperational cycle; control the one or more actuators during a secondoperational cycle that is after the first operational cycle according toa second adjustment that is after the first adjustment in the pluralityof adjustments in response to the actual movement or operation matchingan expected movement or operation associated with the first adjustment;and control the one or more actuators during the second operationalcycle according to a modified second adjustment in response to theactual movement or operation deviating from the expected movement oroperation associated with the first adjustment, wherein implementing themodified second adjustment comprises modifying a parameter that controlsthe one or more actuators adjusted by the second adjustment from a firstvalue to a different second value, and wherein the second value isderived from a difference between the actual movement or operation andthe expected movement or operation.
 16. The controller of claim 15,wherein the one or more processors are further configured to: determineat least one incomplete movement in the expected movement or operationthat is not performed in the actual movement or operation produced bythe one or more actuators during the first operational cycle; and definethe modified second adjustment to perform the at least one incompletemovement before performing movements or operations associated with thesecond adjustment during the second operational cycle.
 17. Thecontroller of claim 15, wherein the one or more processors are furtherconfigured to: determining at least one incomplete movement in theexpected movement or operation that is not performed in the actualmovement or operation produced by the one or more actuators during thefirst operational cycle; determining that the second adjustment isreserved as a buffer and is not defined to perform any movement oroperation; and shifting execution of the at least one incompletemovement into the buffer by defining movements or operations to performthe at least one incomplete movement with the one or more actuatorsduring the second operational cycle as the modified second adjustment.18. The controller of claim 15, wherein the one or more processors arefurther configured to: determining at least one incomplete movement inthe expected movement or operation that is not performed in the actualmovement or operation produced by the one or more actuators during thefirst operational cycle; determining that one or more of the pluralityof adjustments are reserved as a buffer; shifting movements oroperations defined for the second adjustment into a third adjustmentthat is after the second adjustment in the plurality of adjustments; anddefining movements or operations to perform the at least one incompletemovement as the modified second adjustment.
 19. The controller of claim15, wherein the one or more processors are further configured to:determining at least one incomplete movement in the expected movement oroperation that is not performed.
 20. A non-transitory computer-readablemedium, storing a plurality of processor-executable instructions to:receive a task and a time by which a robot is to complete the task;determine a plurality of adjustments to apply to one or more actuatorsof the robot in order to produce a plurality of expected movements oroperations of the robot with which to complete the task within the time,wherein each adjustment of the plurality of adjustments changes amovement or operation performed by the one or more actuators during adifferent operational cycle; control the one or more actuators during afirst operational cycle according to a first adjustment from theplurality of adjustments; determine actual movement or operationproduced by the one or more actuators during the first operationalcycle; control the one or more actuators during a second operationalcycle that is after the first operational cycle according to a secondadjustment that is after the first adjustment in the plurality ofadjustments in response to the actual movement or operation matching anexpected movement or operation associated with the first adjustment; andcontrol the one or more actuators during the second operational cycleaccording to a modified second adjustment in response to the actualmovement or operation deviating from the expected movement or operationassociated with the first adjustment, wherein implementing the modifiedsecond adjustment comprises modifying a parameter that controls the oneor more actuators adjusted by the second adjustment from a first valueto a different second value, and wherein the second value is derivedfrom a difference between the actual movement or operation and theexpected movement or operation.